#ifndef PRESCRIPTIONCHECKER_H
#define PRESCRIPTIONCHECKER_H

#include <QObject>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QJsonObject>
#include <QWebEngineView>
#include <QWebChannel>
#include <QWidget>
#include <QString>
#include <functional>

class PrescriptionChecker : public QObject
{
    Q_OBJECT

public:
    // 回调函数类型定义
    using DataCallbackFunction = std::function<void(const char*)>;
    
    explicit PrescriptionChecker(QObject *parent = nullptr);
    ~PrescriptionChecker();
    
    // 主要接口：发送XML并处理回调
    void DoctorCheck(int tag, const QString& xmlData, DataCallbackFunction dataCallback = nullptr);

public slots:
    // Web页面调用的函数
    Q_INVOKABLE void CheckProbleNotify(const QString& data);
    
    // 使用默认浏览器打开URL
    Q_INVOKABLE void OpenUrl(const QString& url);

private slots:
    void onNetworkReplyFinished();

private:
    QNetworkAccessManager* m_networkManager;
    QNetworkReply* m_currentReply;
    DataCallbackFunction m_dataCallback = nullptr;
    QString m_apiEndpoint;
    QString m_webPageUrl;  // 从配置文件读取的Web页面URL
    int m_dialogWidth;     // 弹窗宽度
    int m_dialogHeight;    // 弹窗高度
    QDialog* m_currentDialog;
    QWebChannel* m_webChannel;
    QString m_xmlData;
    
    // 解析JSON响应
    bool parseResponse(const QByteArray& data, int& problem, QString& presId, QString& random);
    
    // 显示Web页面
    void showWebPageDialog(const QString& url);
};

#endif // PRESCRIPTIONCHECKER_H
